package mapred.groupmaxmin;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;
import java.util.StringTokenizer;

/**
 * 分组统计中，Mapper的职责是：将分组依据作为Key
 */
public class GMMMaper extends Mapper<Object, Text, Text, Text> {

    /**
     * 要统计的列在第几列，下标是从0开始
     */
    private static final int levelIndex = 4;
    private static final int dataIndex = 2;
    // map函数中用到的临时Key-Value
    private Text categery = new Text("");
    private IntWritable one = new IntWritable(1);
    private Text oneValue = new Text();

    /**
     * 将每行的第levelIndex列作为Key放入Map的输出
     */
    protected void map(Object key, Text value, Context context) {

        // 方式1：这是一个实现字符串拆分的工具类，此类默认按照[ \t\n\r\f]来拆分一个字符串为字符串数组
        StringTokenizer itr = new StringTokenizer(value.toString(), ",");
        // 方式2：直接利用字符串对象的split方法，将自己拆分为字符串数组
        String[] datas = value.toString().split(",");
        // 迷糊泰迪,2018-09-20 06:48:00,sml-str40,南信 算是 广州 ,非常好,好,好,518986,4.0,2018,9,3,6,184
        //                               ^                      ^
        categery.set(datas[levelIndex]); // 非常好
        oneValue.set(datas[dataIndex]); // sml-str40
        try {
            // Map的输出结果示例数据为：
            // 非常好-》sml-str40
            context.write(categery, oneValue);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
